Структура System.Nullable<T>

В этой статье приводятся дополнительные замечания к справочной документации по этому API.

Класс Nullable представляет тип значения, который можно назначить null.

Тип, как утверждается, имеет значение NULL, если он может быть назначен или может быть назначен null. Это означает, что тип не имеет никакого значения. По умолчанию все ссылочные типы, например String, имеют значение NULL, но все типы значений, например Int32, не являются.

В C# и Visual Basic тип значения помечается как допускающий значение NULL с помощью ? нотации после типа значения. Например, int? в C# или Integer? в Visual Basic объявляет целочисленный тип значения, который можно назначить null.

Структура Nullable<T> поддерживает использование только типа значения в качестве типа, допускаемого значением NULL, так как ссылочные типы имеют значение NULL при проектировании.

Класс Nullable обеспечивает дополнительную поддержку Nullable<T> структуры. Класс Nullable поддерживает получение базового типа типа, допускающего значение NULL, и операции сравнения и равенства пар типов, допускающих значение NULL, базовый тип которого не поддерживает универсальные операции сравнения и равенства.

Основные свойства

Двумя основными элементами Nullable<T> структуры являются HasValue и Value свойства. HasValue Если свойство объекта Nullable<T> имеет значениеtrue, значение объекта можно получить с помощью Value свойства. HasValue Если свойство имеет falseзначение, значение объекта не определено, и попытка доступа к Value свойству вызывает исключениеInvalidOperationException.

Упаковка-преобразование и распаковка-преобразование

Если задан тип, допускающий значение NULL, среда CLR автоматически настраивает базовое значение Nullable<T> объекта, а не Nullable<T> сам объект. То есть, если HasValue свойство имеет trueзначение, содержимое Value свойства отображается в поле. Если базовое значение типа, допускающего значение NULL, распаковано, среда CLR создает новую Nullable<T> структуру, инициализируемую базовому значению.

HasValue Если свойство типа, допускающего значение NULL, результатом операции бокса являетсяfalsenull. Следовательно, если тип, допускающий значение NULL, передается методу, который ожидает аргумент объекта, этот метод должен быть готов к обработке ситуации, в которой находится nullаргумент. При null распаковки в тип, допускающий значение NULL, среда CLR создает новую Nullable<T> структуру и инициализирует его HasValue свойство в false.

Компоненты среды выполнения Windows

Тип можно включить Nullable<T> в состав структуры, экспортируемой в библиотеку WinMD.